//这里是封装请求axios    //1.安装axios
//2.引入
import axios from 'axios';
import Cookies from 'js-cookie';
import router from '../router';
import qs from "qs";
import NProgress from 'nprogress'//请求时的进度效果的js导入
import store from "@/store"


//我们的项目环境可能有开发环境、测试环境和生产环境。我们通过node的环境变量来匹配我们的默认的接口url前缀。axios.defaults.baseURL可以设置axios的默认请求地址
//3. 环境的切换
let baseURL = ''
if (process.env.NODE_ENV == 'development') {//development---开发环境
  baseURL = 'http://81.71.14.65:8080/m.api';//外网
  // baseURL = 'http://192.168.1.188:8080/m.api';//内网
} else {
  // baseURL = "http://81.71.14.65:8080/m.api"//----生产环境    http://api.0755zcit.com:8080/m.api----上线地址
  baseURL = "http://api.0755zcit.com:8080/m.api"//----生产环境
}
let host = 'http://192.168.1.188:8080'//请求数据时需要的接口路径---内网的---------------给富文本的请求接口路径
// let host = 'http://81.71.14.65:8080'//请求数据时需要的接口路径---外网的


// 创建axios实例-----可以使用自定义配置新建一个 axios 实例
const instance = axios.create({
  baseURL,
  timeout: 5000// 设置请求超时
});

//6. 添加请求拦截器
instance.interceptors.request.use(function (config) {
  console.log("进入了请求拦截器")
  console.log("进入了请求拦截器123")
  // ，展示进度条
  NProgress.start()
  config.headers['AdminToken'] = Cookies.get('token')//请求头
  // 在发送请求之前做些什么
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 7.添加响应拦截器
instance.interceptors.response.use(async function (res) {
  console.log("进入了响应拦截器")
  console.log(res);
  // 无痛刷新-----防止用户添加或者修改的时候令牌消失，退出登录，操作终止
  //管理员未登录,重新获取令牌---10006（未登录）
  if (10006 == res.data.errno) {
    const { username, password } = store.state.Login.datas
    let getLoginData = { _gp: "admin", _mt: "login", username, password }
    const { errno, data, errmsg } = await post(getLoginData) //同步请求登录接口 await与async搭配使用
    cookies.set('token', data)
    nprogress.done()//隐藏进度条
    //重新请求上次接口
    return instance.request(response.config)
  }
  // 对响应数据做点什么

  // 隐藏进度条
  NProgress.done()
  return res;
}, function (error) {
  // 隐藏进度条
  NProgress.done()
  // 对响应错误做点什么
  return Promise.reject(error);
});
function get(params) {
  return instance.get('', {params})
}
function post(data, params) {
  return instance.post('', qs.stringify(data), {params})
}
function upload(url, data) {//给上传图片的请求接口路径
  return instance.post(url, data)
}


export default { get, post, upload, host }
